#include <gl/glew.h>
#include <iostream>
#include <gl/freeglut.h>

#include "Capa.h"
#include "TileSet.h"

using namespace std;

Capa::Capa(short *datos, std::string & nombre, bool blocante):nombreCapa(nombre),data(datos)
	{
		this->blocante = blocante;
	}
TileSet* Capa::buscar(int numeroTile, std::vector<TileSet*> *tilesSets){
		for (int i=0; i < tilesSets->size(); i++){
			TileSet *temp = (*tilesSets)[i];
			if (temp->tieneTile(numeroTile))
				return temp;
				
		}
		return NULL;
	}
void Capa::render(std::vector<TileSet*> *tileSets,int anchoTile, int altoTile, int anchoMapa, int altoMapa, int anchoPantalla, int altoPantalla, float offsetX, float offsetY)
	{

	TileSet *actual = tileSets->at(0);
	actual->bind();
	
	
	//renderizamos desde offsetx - offsety + anchopantalla / anchotile + 1
	int anchoPantallaEnTiles	= anchoPantalla	/ anchoTile;
	int altoPantallaEnTiles		= altoPantalla	/ altoTile;
	int tileInicialX			= -offsetX		/ anchoTile;
	int tileInicialY			= -offsetY		/ altoTile;

	for (int y=tileInicialY; y < tileInicialY + altoPantallaEnTiles + 1 ;y++)//todo controlar que si no esta en esta capa buscar en otras...
		for (int x=tileInicialX; x < tileInicialX + anchoPantallaEnTiles + 1 ; x++){
			if ((y>=0 && y < altoMapa) && (x >= 0 && x < anchoMapa))
				if (data[y*anchoMapa+x]){
					if (!actual->tieneTile(data[y*anchoMapa+x])){
						actual = buscar(data[y*anchoMapa+x],tileSets);
						actual->bind();
					}
				
				actual->renderTile(x*anchoTile,y*altoTile,x*anchoTile + anchoTile,y*altoTile+altoTile,data[y*anchoMapa+x]);
			}
		}
	}
Capa::~Capa(void)
	{
	delete []data;
	//delete nombreCapa;
	}
